// 原型方法/属性：挂载到原型上面的方法或属性
// 实例方法/属性：直接挂载到实例上面的属性或方法
// 静态方法/属性：直接挂载到构造函数上面的属性或方法

/* function Person(name, age) {
  // this => 实例
  // 把 name、age 称为实例属性，因为是挂载到实例上面的
  this.name = name
  this.age = age
  // show 称为实例方法，因为是挂载到实例上面的
  this.show = function () {
    console.log('Hello React')
  }
} */

/* // p => 上面啥都有
const p = new Person('ifer', 18)
// console.log(p.name, p.age)
// p.show()
console.log(p) */

/* const p1 = new Person('ifer', 18)
const p2 = new Person('ifer', 18)
console.log(p1.show === p2.show) // false，浪费内存 */

// 解决内存浪费的问题
/* function Person(name, age) {
  // this => 实例
  // 把 name、age 称为实例属性，因为是挂载到实例上面的
  this.name = name
  this.age = age
}
// show 挂载的构造函数的原型上面啦
// show 称为原型方法
Person.prototype.show = function () {
  console.log('Hello React')
}
// version 称为原型属性
Person.prototype.version = 1
const p1 = new Person('ifer', 18)
const p2 = new Person('elser', 19)
console.log(p1.show === p2.show) // true，解决了内存浪费的问题 */

function Person(name, age) {
  this.name = name
  this.age = age
}
Person.prototype.show = function () {
  console.log('Hello React')
}
// 总之，Person 是一个对象，是对象就可以通过点挂载恭喜
// 静态属性，直接通过构造函数能访问的属性
Person.sex = '男'
// 静态方法
Person.test = function () {
  console.log('test')
}
// const p1 = new Person('ifer', 18)
console.log(Person.sex)
Person.test()
